PIC18 USB通信の実験
PIC18シリーズの USB機能を用いるために、その複雑なプログラムを自分で作る代わりに、マイクロチップテクノロジー社が無償で提供している、USB関係の各種デモ・プログラム集
MCHPFSUSB(マイクロチップ・フルスピード・USB)をダウンロードし、これを雛形として多少改造して利用する方法をとることにする。 メイン関数、割込み関数などは自分で作らなければならないが、そのほかのファイルは修正なし、あるいは、一部を改造してヘッダーファイルとして用いる。
また、マイコンとの通信に関連する パソコン用ソフトの中に含まれるファイルのバージョンが古いので、マイクロソフト社が提供している
Visual C#、Visual BASIC などを用いてリビルド(再ビルド)してから利用する。 ・・・・・・・ 他人の”ふんどし”で相撲をとる? 相撲=”syu-mo”(ヘブライ語)
(参考文献) 「PICで動かすUSB」、鈴木哲哉著、ラトルズ
1. MCHPFSUSB のダウンロード:
・ http://www.microchip.com/ → USB → Software & Tools → MCHPFSUSB Framework を開き、 Microchip
Application libraries ・・・・ をダウンロードする。
インストールした Microchip Application libraries は、C:ドライブの Microchip Solutions フォルダに入るので、いつも使うプロジェクトが収められているフォルダに移動しておくと使いやすい。 ファイルには各機種のUSB関係のファイルがたくさん含まれているが、PIC18F14K50、
PIC18F2550に応用可能な雛形には、次のようなフォルダがある。
USB Device - Audio - Microphone(仮想マイク音声)、 USB Device
- Audio - MIDI(仮想MIDI音階出力)、 USB Device - Bootloaders(自己書き込み・ブートローダー)、 USB
Device - CDC - Basic Demo(仮想シリアルで文字を送受信)、 USB Device -
HID - Custom Demo(評価装置の制御)、 USB Device - HID - Digitizers(仮想タッチデバイス)、 USB
Device - HID - Joystick(仮想ジョイスティック)、 USB Device - Keyboard(仮想キーボード)、 USB
Device - HID - Mouse(仮想マウス)、 USB Device - HID - Uninterruptible
Power Supply(仮想バッテリーで残量表示)、 USB Device - LibUSB - Generic
Driver Demo(汎用ドライバLibUSB)、 USB Device - WinUSB - Generic
Driver Demo(汎用ドライバWinUSB)、 USB Device - WinUSB - High Bandwidth
Demo(汎用ドライバWinUSB広帯域転送)
2. PIC18F14K50のUSB評価装置の作製:
評価装置と言っても、5V電源を Bコネクタを通じてパソコンからもらってPIC1個を動かすだけの、最もシンプルな回路である。外部発振には 12MHzのレゾネータを用い、PLL回路によって12×4 = 48MHzのフルスピード(USB2.0、12Mビット/秒)で、CPU、USB共に動作する。(* 内部発振では8MHzまで。 PIC18F2550
の場合は 20MHzの振動子で48MHzになる) 17pinのコンデンサーはD+、D−のプルアップ電源(3.3V)を平滑するために入れる。
( 注意) 外部の電源は、つなぐとパソコンを壊す恐れがあるので 決してつなげてはならない。セルフ電源を常時使用して、USBにつなげたときに自動的にパソコンからのバス電源に切り替えるためには、専用の切替回路を使用しなければならない。→
前項の2.の回路参照 ) 因みに、ラトルズの付録の基板では、1.5V電池による5V電源との切り替え回路が付いている。
3. USB各クラスの実験:
Windows XP 以降のパソコンの標準ドライバには次のようなものがあり、これらのドライバは ディスクリプタに記述したクラス番号で特定される。
クラス番号 | 対象の分野 | 代表的な機器 または データ |
0x01 | オーディオ | オーディオ/MIDI ストリーミング |
0x02 | 通信 | シリアル(モデム)、イーサネット |
0x03 | ヒューマンインターフェース | マウス、キーボード、ジョイスティック |
0x06 | イメージング | イメージスキャナ |
0x07 | プリンタ | プリンタ |
0x08 | 大容量記憶装置 | ハードディスク、USBメモリ |
0x09 | ハブ | ハブ |
0x0b | スマートカード | スマートカード |
0x0e | ビデオ | テレビ、ビデオ |
0xe0 | Bluetooth | Bluetooth |
0xff | ベンダ | 独自のUSB機器 |
(1) 文字通信クラス(CDC)の動作確認:
CDCは、文字を通信するUSBクラスで、装置がUSBで接続されているにもかかわらず、パソコン側から見て
シリアルで接続されているように動作する。
文字通信クラスの雛形 USB Device - CDC - Basic Demo を MPLAB IDE で開き 再ビルドすることができる。 hex.ファイルを
PICkit で書き込み、USBコネクタをつなげると、パソコンが自動的にこの装置を認識して、”新しいハードウェアの検出ウィザード”が起動するが、一度、インストールに失敗する。
その後、 コントロールパネル → システム → ハードウェア から デバイスマネージャー を開くと、ポートのところに
CDC RS−232 Emulation Demo が入っているので、これを右クリックして
”ドライバーソフトウェアの更新”を選択する。 ”コンピューターを参照”で、INFファイルが入っている
inf フォルダ(<CDC Basic<USB)を選択してインストールする。
装置を接続している間は、パソコンに 仮想シリアルポート(COM3)が現われ、Tera Term(フリーの仮想ターミナル)などのシリアル入出力ソフトで 設定(シリアルポート:COM3、通信速度・通信形式は任意)して動作確認することができる。
この仮想ポートを一度作っておくと、同様のCDC処理をする機器はそのままパソコンに接続できる。
(2) USB−シリアル変換IC としての利用:
USB端子からシリアル通信装置を接続する USB−シリアル変換IC としては、FT232RL が代表的でよく用いられるが、PIC18F14K50はパッケージがDIPであり ピッチ変換基板が不要なので、作りやすく、コンパクトに収まる。(FT232RLの価格も 単品で14K50の倍くらい、変換モジュール(ミニBコネクタ付き)は1000円程度もする) 通信速度は、FT232RLが3Mビット/秒 に対し PIC18F14K50は56kビット/秒が上限で劣るが、通常の用途(データロガなど)には充分使える。
他の USB機能を持たないPICマイコンの TX端子につなげて USB通信する場合や、USB
PICマイコンのソフトを改造するのが面倒な場合は、この変換装置を用いるのが便利である。(シリアル通信のレベルコンバーター
ADM3202 のように PIC18F14K50 を用いる)
MCHPFSUSBには USB Device - CDC - Serial Emulator が含まれているが、そのままではレベルコンバーター無しには使えないので、これを雛形として
USB−シリアル変換IC のプログラムに改造する。
USB Device - CDC - Serial Emulator の main.c のみを書き換え、ビルドする。
シリアルの初期化関数 UserInit が呼び出している 関数 InitializeUSART で、シリアル受信の割り込み(低優先割込みとして)を有効とし(下記プログラムの 左)、割込み関数では 割り込みで受信したデータをバッファの書き込み位置に保存する(中)。(その後は、関数 ProcessIO と 関数 getcUSART が、データの受信と配列への書き込みを行なう。)
また、主な処理を行なう 関数 ProcessIO では、割り込みを作った分、シリアル割込みを無効にしてから パソコンへUSBで文字列を送信(関数
putUSBUSARAT)する必要がある。(右)
(関数ProcessIOで使われている関数)
・ USBUSART1sTxTrfReady ・・・ USBで送信可能ならば1を返す
・ putUSBUSART ・・・ バッファの文字列をUSBで送信する
・ getsUSBUSART ・・・ USBで受信した文字列をバッファに保存し、文字数を返す
・ mDataRdyUSART ・・・ シリアルに着信したデータがあるなら1を返す
・ getsUSART ・・・ シリアルで1文字を受信する
・ mTxRdyUSART ・・・ シリアルが送信可能なら1を返す
・ putcUSART ・・・ シリアルで1文字を送信する
● ソース(main.c のみ):
USB−シリアル変換器として、データロガ温湿度計(PICの応用回路(3)参照)の TX を 変換器の RX につないでみた結果は、COMポートのボーレート(4800)を合わせるだけで
問題なく動作した。5V電源は絶対につないではならない。 通信速度は この変換器につなげる機器の通信速度による。(たとえば、ラトルズの温湿度計基板のボーレートは1200)
(3) ヒューマンインターフェース(HID)クラスの実験:
USB Device−HID−Keyboad の動作確認をする。 装置が出力するデータは、文字ではなく、キー操作であり、このソフトを書き込んだ装置は、パソコンがキーボードと認識し、タクトスイッチのボタン操作でメモ帳等に文字列を記入することができる。文字は
ボタンを押すたびに a〜z、1〜9、0 に変化する。実物のキーボードはこれと共存して働き、[Num
Lock]キーを押すと 装置のLEDを点滅させる。
・ キーボードが出力するデータ列(8バイト): Modifier(ビット0〜7)がそれぞれ 左Ctrl、左Shift、・・など)、Reserved(0)、 残り6バイトは Keycode(0x04-0x1d: a-z、0x1e-0x27: 1-0、0x27-0x2c: Enter,Esc,Back,Space,Tab,Space、0x2d-0x39: _, =, [, ], \, #, ;, ", ~, ,, ., /, CapsLock、0x3a-0x45: F1-F12、0x46-0x48: PrtScr,Scroll Lock,Pause、0x49-0x4b: Insert,Home,PageUp、0x4c-0x4e: Del,End,PageDown)
USB Device−HID−Mouse は、パソコンがマウスと認識し、マウスポインタが回転し、ボタンを押すと 停止/再開する。
X、Y方向の移動量はともに −4、0、4 を出力。
・ マウスが出力するデータ列: Device Specific、Buttons(ビット0:ボタン1、ビット1:ボタン2、ビット2:ボタン3)、X
displacement(X方向の移動量 -127〜127)、Y displacement(Y方向の移動量
-127〜127)
USB Device−HID−Joystick は、標準ドライバが HID準拠ゲームコントローラと認識し、アプリケーションに対しゲームパッドとして働く。プロジェクトのフォルダに含まれているアプリケーション
joytester.exe は、ジョイスティックの情報と状態を表示し、装置のボタンを押すと、Buttons
の2が点滅し四角(X−Y)の左上へ、丸(ハットスイッチ)の右端に移動する。
・ 装置が出力するデータ列: Buttons1( bit0: □、bit1: ×、bit2: ○b、bit3:
△、bit4: L1、bit5: R1、bit6: L2、bit7: R2)、Buttons2( bit0: Select、bit1:
Start、bit2: 左スティック、bit3: 右スティック、bit4: Home、bit5-7: 無効)、
Hat Switch(bit0-3: 方向、bit4-7: 無効)、 (次の4バイト)Analog X、Y、Z、RZ:
4次元のアナログ値
その他、 USB Device−HID−Digitizers(Window7対応の仮想タッチデバイス。XPには使えない)、
USB Device−HID−Uninterruptible Power
Supply(仮想バッテリーでタスクトレイに残量表示)、 USB Device−HID−Custom
Demos(評価ボードの制御) がある。
(4) HID キーボードによるゲームコントローラの実験:
USB Device−HID−Keyboad を修正して、Windows XPに付属する”3Dピンボール”(キーボード操作だけで行なうゲーム)のコントローラーを作成する。
(* OSがWindowsXPでないならば、http://download.cnet.com/Full-Tilt-Pinball-Windows-95-demo/3000-2099_4-10001045.html より Full
Tilt! Pinball の配布ファイルをダウンロードし、インストールせず、FULLDEMO
フォルダの DEMO.EXE を実行する。)
ゲームに必要なボタンは4個で、基板のタクトスイッチ: ゲーム開始(キーボードでは
[F2])、 および、外付けタクトスイッチ(3個): プランジャ(ボールを飛ばす)(Space)、左右フリッパ(押すと跳ね上がる)(z、/) で操作する。
外付けボタンは、RC3、6、4 を定義(上記 キーボードの keycode 参照)する。(左) 外付けボタンのポートの初期化を追加する。(中) USBが転送可能なときに、ボタンの操作に応じて 配列 hid_report_in [ ] にデータが入力され、パソコンから見て入力側のエンドポイントにコピーされる。(右、左下の図)
USBの処理に ポーリングが選択されているので、関数 ProcessIOと、ここから呼び出す 関数 Keyboad は 繰り返し呼び出され、これらの プランジャ、フリッパボタンは、押し続けると毎回その状態を出力する。ゲーム開始に使う sw3 は押したとき1回のみ出力。
● ソース(main.c): HardwareProfile-LowPinCountUSB Development Kit.h :
(5) オーディオクラスの実験:
USB Device - Audio - Microphone(仮想マイクで音声を出力)を書き込んだ装置は、パソコンがマイクと認識し、ボタンを押すと音声(”ポン”という音)を出力する。 (アクセサリー → エンターテイメント → )サウンドレコーダーで、動作確認をすることができる。音の形式は、PCM、8.000kHz、16ビット、モノラル、15kバイト/秒。 オーディオクラスの決まりごとのため、音声の制御データは、エンドポイント 0 でコントロール転送(アイクロナス転送)され、16バイト/1mS ずつ転送される。これは USB1.1に定義されている。(1mSのフレームを 125μSに区切った転送はできない。)
USB Device - Audio - MIDI(仮想MIDIデバイスで音階を出力)は、ボタンを押すたびに半音階上がり 14回目に元に戻る。音階のデータは、ピッチベンドを上げながら 0x3c-0x49 の範囲を繰り返す。 Windowsでは メディアプレーヤーがMIDIファイルを再生するが、MIDIデバイスからの入力を直接再生するには MIDIシーケンサーなどのアプリケーションが必要になる。一例として、フリー配布の Cherry (http://www.vector.co.jp/authors/VA010012/ )をダウンロードし、その中の
cherry.exe を実行する。(設定→環境設定、MIDI INの[Port]で条件を選択)
MIDIデータはエンドポイント 0 でバルク転送される。 (・ パソコンから出力されるMIDIデータについては、main.c
の ProcessIO に処理の記述位置がコメントされている。)
§ プログラムとDNA情報の類似性について:
プログラムによる機械の動作方式と、神様が創造された DNAによる生物体の仕組みとは、なんと似ていることでしょう。生物体は、精密機械の機構部分のようにガチガチに作られたのではなく、神様が、ソフトウェアを”知的に”生体マイコンに”書き込まれた”のです。
ソフトウェアを作ってシリコン系統の半導体による回路で機械を動かすのは、神様が、炭素の骨組みでできた生物を
DNAにソフトウェアを書き込んで動かすのと同じです。ただ、半導体はケイ素という無機物で、一方、DNAは骨組みが炭素の有機物でできているのが、素材としては異なる部分です。炭素同士の結合は、ダイヤモンドと同じ結合なので、非常に丈夫に作られています。(ただし、水素結合部分は弱い)
また、ソフトウェアもDNAもある程度自己修復機能を持ち、また、内部に入り込んで影響を与える”ウイルス”も存在します。
さらに、マイコンのソフトには、// で区切ったコメント文や、他の機種や他の用途にしか用いられない直接には動作しない部分が多く、ちょうど、DNAにおいて95%も存在する 無効な配列の部分・・・がらくた遺伝子・・・の部分と同様になっています。
ところが、DNAの情報は、塩基が4種類もあるので、その組み合わせにより、0 と 1 の2種類しかないデジタル信号よりもはるかに効率良くできています。 充分の個数のある n種類の中から、 重複を許して r個取って並べていくやり方の数は、 nΠr = nr 通り(重複順列)で、4種類の塩基(A、T、G、C)の中から一つずつ選んで
ヒトの塩基数 30億個まで順番に並べるやり方の総数は、43000000000 通りもあります。 同じ個数の素材分子があるとして比較すると、 2n < 4n の差があって、n の数が大きくなるほど急激にその組み合わせの数は増します。
コンピューターのプログラムが、なにか袋に多くの小石を詰め込んで攪拌してみても、決して自然発生的にはできないのと同様に、DNAという情報体高分子も到底 自然発生的にはできません。しかも、分子レベルのミクロな物体なので、人工的にも作ることはできません。 DNAがあまりにもミクロで技術的に困難な上、ミクロの領域では避けて通れない、量子論の、「不確定性原理」の壁があるからです。
コンピューターの既製のソフトが公開されている場合、それを注意深く分析して、一部を修正して用いることができます。DNAも、短いある特定の部分だけを取り出して、その機能を最大限引き出すことは可能です。
また、ソフトの全体、または、一部をコピーすることは容易にできますが、DNAも PCR法によって断片を増幅していくことが可能となりました。
( 参照) → DNA転写のメカニズム )
さて、アダムとエバのときから 人類に入り込んでしまった「原罪」の性質は、DNAによって すべての人に遺伝しています。そして、神様との関係を断ち切られ、「寿命」が有限になり、DNAに起因する身体や脳・神経におけるいろいろな欠陥も発生して、多くの点で”のろわれた状態”になってしまいました。
しかしながら、バージョンの古いマイコン用ソフトは、新しいソフトによって ”リビルド(再構築)”すると、新しい用途に適合するように”再生”します。
ましてや、キリストは、(しるしとなっている)DNAも 何もかも造られた「天地万物の創造主」であり、「全能の神」、「王の王、主の主」、「万軍の主」、「永遠の命であり、道であり、真理である方」、そして、すべての源泉たる「常に新しい方」です。 この 「神のひとり子」が、実に、「神の子羊」となられて、わたしたちの罪の身代りに、自ら十字架にかかって死んでくださいました。 これが「神の愛」です。
キリストの十字架の血によって、古い性質を持っていたわたしたちも 新しく生まれ変わり、「新生」するのです。
・・・・ 「だれでもキリストのうちにあるなら、その人は(永遠に)新しく造られた者です。
古きは過ぎ去り、すべてが新しくなった。」(コリント人への手紙第2、 5章17節)